package main

import (
	"fmt"
)

/*
*
循环 slice 和循环 arr 语法使用上相同
虽然循环语法相同，但 array 和 slice 在以下方面有区别：
1.内存分配：Array 在栈上分配，Slice 在堆上分配（通常）
2.传递方式：Array 传递时是值拷贝，Slice 传递的是引用
3.性能：Array 访问略快，Slice 多了一层间接访问
*/
func main() {
	person := []string{"Tom", "Aaron", "John"}
	fmt.Printf("len=%d cap=%d slice=%v\n", len(person), cap(person), person)

	fmt.Println("")

	//循环
	for k, v := range person {
		fmt.Printf("person[%d]: %s\n", k, v)
	}

	fmt.Println("")

	for i := range person {
		fmt.Printf("person[%d]: %s\n", i, person[i])
	}

	fmt.Println("")

	for i := 0; i < len(person); i++ {
		fmt.Printf("person[%d]: %s\n", i, person[i])
	}

	fmt.Println("")

	//使用空白符
	for _, name := range person {
		fmt.Println("name :", name)
	}
}
